# -*- coding: utf-8 -*-
import os
import shutil
import glob
import smtplib
from email.Message import Message

from PyQt4.QtCore import QString
from PyQt4.QtGui import QMessageBox

from config.preferences import SYSTEM, SRC_PATH, DADOS_DB

try:
    _fromUtf8 = QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s


class ActionsUploadDb():

    def __init__(self, db):
        """
            Construtor da classe.
        """
        self.db = db



    def copiarDadosParaDiretorioDbTmp(self):
        """
            Metodo que executa a copia dos dados que estao no diretorio
            /tmp/dados , para o diretorio /dados/tmp no servidor.
        """
        if SYSTEM == "linux2":
            caminhoDadosTmp = (SRC_PATH + "/tmp/dados/")
            os.chdir(caminhoDadosTmp)
            diretorios = os.listdir(caminhoDadosTmp)
            j = len(diretorios)
            a = 0
            
            for dir in diretorios:
                _caminhoDadosTmp = caminhoDadosTmp
                caminhoDiretorio = (_caminhoDadosTmp + dir)
                os.chdir(caminhoDiretorio)
                num = os.listdir(caminhoDiretorio)
                num = len(num)
                if num == 0:
                    a += 1
                else:
                    
                    for _caminhoDadosTmp in glob.glob(
                                                      caminhoDiretorio +
                                                      "/*.jpg"):
                        shutil.move(
                        _caminhoDadosTmp,(
                        DADOS_DB + "tmp/" + dir))
            if j == a:
                QMessageBox.warning(
                                    None,
                                    " TSM ",
                                    _fromUtf8(
                                    "Nao ha arquivos!!!"))
            else:
                self.inserirDadosDb()
            os.chdir(SRC_PATH)


        else:
            caminhoDadosTmp = (SRC_PATH + "/tmp/dados/")
            os.chdir(caminhoDadosTmp)
            diretorios = os.listdir(caminhoDadosTmp)
            j = len(diretorios)
            a = 0
            
            for dir in diretorios:
                _caminhoDadosTmp = caminhoDadosTmp
                caminhoDiretorio = (_caminhoDadosTmp + dir)
                os.chdir(caminhoDiretorio)
                num = os.listdir(caminhoDiretorio)
                num = len(num)
                if num == 0:
                    a += 1
                else:
                    
                    for _caminhoDadosTmp in glob.glob(
                                                      caminhoDiretorio +
                                                      "/*.jpg"):
                        shutil.move(
                                    _caminhoDadosTmp,(
                                    "//192.168.1.250/vna/dados/tmp/" +
                                    dir))
            if j == a:
                QMessageBox.warning(
                                    None,
                                    " TSM ",
                                    _fromUtf8(
                                    "Nao ha arquivos!!!"))
            else:
                self.inserirDadosDb()
            os.chdir(SRC_PATH)



    def inserirDadosDb(self):
        """
            Metodo para inserir os dados que estao no diretorio /dados/tmp
            no banco de dados vna.sqlite.
        """
        dados = []
        if SYSTEM == "linux2":
            os.chdir(DADOS_DB + "tmp/")
            caminhoDados = (DADOS_DB + "tmp/")
            diretorios = os.listdir(caminhoDados)
            
            for dir in diretorios:
                _caminhoDados = caminhoDados
                caminhoDiretorio = (_caminhoDados + dir + "/")
                os.chdir(caminhoDiretorio)
                arquivos = os.listdir(caminhoDiretorio)
                
                for arq in arquivos:
                    status = "Producao"
                    num_pedido = 0
                    _plot = (DADOS_DB + "dataBase/" + dir + "/" + arq)
                    plot = str(_plot)
                    nomeArquivo = arq.split("_")
                    id_produto_entrada = self.db.getIdFromProduto(dir)
                    _date = nomeArquivo[0]
                    year = _date[:4]
                    month = _date[4:6]
                    day = _date[6:]
                    date = (year + "-" + month + "-" + day)
                    num_serie = nomeArquivo[1]
                    ordProd = nomeArquivo[2]
                    ordProd = ordProd.split(".")
                    ord_producao = ordProd[0]
                    if not dados.count(ord_producao):
                        dados.append(ord_producao)
                    self.db.adicionarEntrada(
                                             id_produto_entrada,
                                             num_serie, ord_producao,
                                             num_pedido, plot, date, status)
            QMessageBox.information(
                                    None,
                                    " TSM ",
                                    _fromUtf8(
                                    "Banco de Dados Atualizado!!!"))
            os.chdir(SRC_PATH)
            self.dadosCopiados = dados
            self.copiarDadosParaDiretorioDb()
            
        else:
            os.chdir("//192.168.1.250/vna/dados/tmp/")
            caminhoDados = ("//192.168.1.250/vna/dados/tmp/")
            diretorios = os.listdir(caminhoDados)
            
            for dir in diretorios:
                _caminhoDados = caminhoDados
                caminhoDiretorio = (_caminhoDados + dir)
                os.chdir(caminhoDiretorio)
                arquivos = os.listdir(caminhoDiretorio)
                
                for arq in arquivos:
                    if arq == "Thumbs.db":
                        pass
                    else:
                        status = "Producao"
                        num_pedido = 0
                        _plot = ("//192.168.1.250/vna/dados/dataBase"
                                  + dir + "/" + arq)
                        plot = str(_plot)
                        nomeArquivo = arq.split("_")
                        id_produto_entrada = self.db.getIdFromProduto(dir)
                        _date = nomeArquivo[0]
                        year = _date[:4]
                        month = _date[4:6]
                        day = _date[6:]
                        date = (year + "-" + month + "-" + day)
                        num_serie = nomeArquivo[1]
                        ordProd = nomeArquivo[2]
                        ordProd = ordProd.split(".")
                        ord_producao = ordProd[0]
                        if not dados.count(ord_producao):
                            dados.append(ord_producao)
                        self.db.adicionarEntrada(
                                                 id_produto_entrada,
                                                 num_serie, ord_producao,
                                                 num_pedido, plot, date, status)
                        
        QMessageBox.information(
                                None,
                                " TSM ",
                                _fromUtf8(
                                "Banco de Dados Atualizado!!!"))
        os.chdir(SRC_PATH)
        self.dadosCopiados = dados
        self.copiarDadosParaDiretorioDb()


    def copiarDadosParaDiretorioDb(self):
        """
            Metodo para copia dos arquivos do diretorio temporario no servidos
            para o diretorio /dados/dataBase/.
        """
        if SYSTEM == "linux2":
            caminhoDadosDbTmp = (DADOS_DB + "tmp/")
            os.chdir(caminhoDadosDbTmp)
            numeroDeDiretorios = os.listdir(caminhoDadosDbTmp)
            j = len(numeroDeDiretorios)
            i = 0
            while i < j:
                _caminhoDadosTmp = caminhoDadosDbTmp
                nomeDiretorio = numeroDeDiretorios[i]
                caminhoDiretorio = (_caminhoDadosTmp + nomeDiretorio)
                os.chdir(caminhoDiretorio)
                for _caminhoDadosTmp in glob.glob(
                                                  caminhoDiretorio + "/*.jpg"):
                    shutil.move(
                                _caminhoDadosTmp,(
                                DADOS_DB + "dataBase/" + nomeDiretorio))
                i += 1

        else:
            caminhoDadosDbTmp = ("//192.168.1.250/vna/dados/tmp/")
            os.chdir(caminhoDadosDbTmp)
            numeroDeDiretorios = os.listdir(caminhoDadosDbTmp)
            j = len(numeroDeDiretorios)
            i = 0
            while i < j:
                _caminhoDadosTmp = caminhoDadosDbTmp
                nomeDiretorio = numeroDeDiretorios[i]
                caminhoDiretorio = (_caminhoDadosTmp + nomeDiretorio)
                os.chdir(caminhoDiretorio)
                for _caminhoDadosTmp in glob.glob(
                                                  caminhoDiretorio + "/*.jpg"):
                    shutil.move(
                                _caminhoDadosTmp,(
                                "//192.168.1.250/vna/dados/dataBase/" +
                                nomeDiretorio))
                i += 1
        self.enviarEmail(self.dadosCopiados)



    def enviarEmail(self, dados):
        """
        
        """
        dados = str(dados)
        de = 'fberton@tsm.com.br'
        para = ['fbberton@gmail.com']
        subject = "Banco de Dados Atualizado. %s" %dados
        headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" %(
                                                                de,
                                                                para,
                                                                subject)
        d = ("Foram adicionados ao banco de dados os produtos das "
             "seguintes ordens de producao: %s" %dados)
        message = headers + d
        try:
           smtpObj = smtplib.SMTP('mail.tsm.com.br', 25)
           smtpObj.starttls()
           smtpObj.sendmail(de, para, message)
        except SMTPException:
           print "Error: unable to send email"
